iT邦幫忙

2023 iThome 鐵人賽

DAY 22
1
Mobile Development

Android studio使用過程與開發說明系列 第 22

Day22 Intent 轉跳功能 + 返回功能 + 資料傳遞到另一個畫面

  • 分享至 

  • xImage
  •  

前言
當你開發Android應用程式時,經常需要在不同的活動(Activity)之間進行轉跳,以實現應用程式中不同功能和畫面之間的切換。這個過程通常涉及使用Android的Intent,它是一種用於在不同組件之間進行通信的機制。本篇文章將介紹在Android應用程式中如何使用Intent實現以下功能:

  1. 轉跳功能:將應用程式從一個活動轉移到另一個活動。這是實現不同功能和畫面之間切換的基本操作。

  2. 返回功能:如何從一個活動返回到前一個活動,以實現流程控制和用戶導航。

  3. 資料傳遞到另一個畫面:如何使用Intent將數據(例如文字、圖像或其他資訊)從一個活動傳遞到另一個活動,以實現資訊共享和處理。

在這篇文章中,我們將探討這些主題的基本原則和實際示例,以幫助你更好地理解和應用Intent在Android應用程式中的使用。

功能

步驟

  1. 建立空的Activity
    名稱的部分自行輸入想要的名子就好了,我這裡是用result_activtiy.xml。
    https://ithelp.ithome.com.tw/upload/images/20230918/201615023Wqjp7C9AT.png

  2. 設計main_activity.xml與result_activtiy.xml的畫面

main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="409dp"
        android:layout_height="729dp"
        android:orientation="vertical"
        tools:layout_editor_absoluteX="1dp"
        tools:layout_editor_absoluteY="1dp">

        <TextView
            android:id="@+id/textView2"
            android:layout_width="match_parent"
            android:layout_height="0sp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="Intent Deom"
            android:textSize="30sp" />

        <View
            android:id="@+id/view"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="3" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0sp"
            android:layout_weight="0.4"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/textView3"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="4"
                android:gravity="fill_vertical"
                android:text="input Text"
                android:textSize="25sp" />

            <EditText
                android:id="@+id/editTextText"
                android:layout_width="0sp"
                android:layout_height="match_parent"
                android:layout_weight="6"
                android:ems="10"
                android:inputType="text" />

        </LinearLayout>

        <Space
            android:layout_width="match_parent"
            android:layout_height="0sp"
            android:layout_weight="0.2" />

        <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="0.5"
            android:text="送出" />

        <View
            android:id="@+id/view2"
            android:layout_width="match_parent"
            android:layout_height="0sp"
            android:layout_weight="3" />

    </LinearLayout>
</LinearLayout>

result_activtiy.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ResultActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal">

            <Button
                android:id="@+id/button3"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="3"
                android:text="return"
                android:textSize="20sp" />

            <TextView
                android:id="@+id/textView6"
                android:layout_width="0sp"
                android:layout_height="match_parent"
                android:layout_weight="7"
                android:gravity="center"
                android:text="Result Demo"
                android:textSize="30sp" />

        </LinearLayout>

        <TextView
            android:id="@+id/textView8"
            android:layout_width="match_parent"
            android:layout_height="0sp"
            android:layout_weight="1"
            android:textSize="50sp"
            android:text="Context:" />

        <TextView
            android:id="@+id/textView7"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="8"
            android:text=""
            android:textSize="30sp" />

    </LinearLayout>
</LinearLayout>
  1. 寫程式碼

MainActivty

轉跳畫面並把資料傳送到ResultActivity

package com.example.intentdeom;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;


public class MainActivity extends AppCompatActivity {
    private EditText input_editText;
    private Button sentData_button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Initialize();//初始化設定
        Intent();//轉跳畫面並把資料發到另一個畫面
    }
    private void Initialize(){
        ById();//綁定元件
    }
    private void ById(){
        input_editText = findViewById(R.id.editTextText);
        sentData_button = findViewById(R.id.button);
    }
    private void Intent(){
        sentData_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 在第一個頁面
                String dataToPass = String.valueOf(input_editText.getText());
                Intent intent = new Intent(MainActivity.this, ResultActivity.class); //設定轉跳的起點和終點
                intent.putExtra("key_data", dataToPass); //(key,value)放入關鍵字和值
                Log.d("dataToPass",dataToPass);
                startActivity(intent);//開始轉跳的部分
            }
        });
    }
}

ResultActivtiy

顯示結果畫面並接受來自MainActivity的資料

package com.example.intentdeom;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class ResultActivity extends AppCompatActivity {
    private Button return_button;
    private TextView context_textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);
        initialize();//初始化設定
        ReturnActivity();//返回上一頁
    }
    private void initialize(){
        ById();//綁定元件
        // 在第二個頁面的onCreate方法中
        Bundle extras = getIntent().getExtras();
        String receivedData = "";
        if (extras != null) {
            receivedData = extras.getString("key_data");
        }
        context_textView.setText(receivedData);//更新TextView
    }
    //綁定元件
    private void ById(){
        return_button = findViewById(R.id.button3);
        context_textView = findViewById(R.id.textView7);
    }
    private void ReturnActivity(){
        return_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ResultActivity.this.finish();//結束這個ResultActivity Class
            }
        });
    }
}

轉跳功能、準備資料傳遞到第二個畫面、第二個畫面接受第一個畫面資料、返回功能 程式碼介紹

轉跳功能、準備資料傳遞到第二個畫面
在第一個畫面,寫上Intent的方法來轉跳畫面

  1. Intent(MainActivity.this, ResultActivity.class):設定轉跳畫面的起點和終點
  2. intent.putExtra("key_data", dataToPass); 放入放入關鍵字和值(key,value)
  • 要注意因為資料型態不同intent.xxxxx 的方法會不一樣。
            // 在第一個頁面
            String dataToPass = "這是要傳遞的資料";
            Intent intent = new Intent(MainActivity.this, ResultActivity.class); //設定轉跳的起點和終點
            intent.putExtra("key_data", dataToPass); //(key,value)放入關鍵字和值
            startActivity(intent);//開始轉跳的部分

第二個畫面接受第一個畫面資料、返回功能

第二個畫面接受第一個畫面資料

  • 這裡要注意在第一個Activtiy是什麼資料型態的函式,在第二個畫面的getIntent().xxxxxx要跟第一個畫面放入的方法一樣。
  • 用(Key)關鍵字來抓取值
        // 在第二個頁面的onCreate方法中
        Bundle extras = getIntent().getExtras();
        String receivedData = "";
        if (extras != null) {
            receivedData = extras.getString("key_data");
        }

返回功能

ResultActivity.this.finish();//結束這個ResultActivity Class

總結
這次好像沒什麼好總結的,都如同上方說明


上一篇
Day21 - MVP架構
下一篇
Day23 - popupwindow 內遷 RecycleView的方法
系列文
Android studio使用過程與開發說明30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言